本篇來介紹 Signer 類型。
signer 簽名者是一種原生的不可複製 (類資源) 類型,他保存交易發送者的地址。允許持有人代表特定 address
// 本機實現
struct signer has drop { a: address }
簽名者類型代表發件人權限。換句話說 - 使用簽名者意味著訪問發送者的地址和資源。它與簽名或字面簽名沒有直接關係,就 Move VM 而言,它只是代表發送者。
簽名者類型只有一種能力: drop
一個 Move 程式可以在沒有特殊許可的情況下使用地址 address
文字創建任何值:
let a1 = @0x1;
let a2 = @0x2;
但是,signer
值是特殊的,因為它們不能通過文字或指令創建,只能由 Move VM 創建。在 VM 運行帶有 type 參數的腳本之前signer
,它會自動創建signer
值並將它們傳遞給腳本:
script {
use Std::Signer;
fun main(s: signer) {
assert!(Signer::address_of(&s) == @0x42, 0);
}
}
須注意是,所有簽名者參數必須放在第一位
script {
use Std::Signer;
fun main(s1: signer, s2: signer, x: u64, y: u8) {
// ...
}
}
address
由 this 包裹的&signer
。address
對此包裝的引用&signer
。Signer 值是不可複製的,意味著無論任何操作或是通過 copy 和 reference 都無法複製。
讓我們 Move to Day 17